package com.yifeng.servlet;

import com.yifeng.common.Result;
import com.yifeng.factory.ServiceFactory;
import com.yifeng.model.User;
import com.yifeng.service.UserService;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*
负责人：倾枫

功能：用户登录接口，处理用户登录请求，验证用户名和密码

参数：无

返回值：无
*/
/**
 * 登录接口：/api/login
 * <p>
 * 支持前端以 JSON 格式发送登录数据，例如：
 * {
 *   "userName": "admin",
 *   "password": "123456"
 * }
 * </p>
 */
@WebServlet("/login")
public class LoginServlet extends BaseServlet {

    /*
    负责人：倾枫

    功能：处理HTTP请求的核心方法，实现用户登录功能

    参数：req - HTTP请求对象, resp - HTTP响应对象

    返回值：无
    */
    @Override
    protected void doHandle(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 1. 仅允许 POST 请求
        if(!"POST".equals(req.getMethod())){
            writeJson(resp, Result.fail(405,"请求方法错误"));
        }
        //获取JSON参数
        // 2. 从请求体中读取 JSON 并解析为 user 对象
        User user = readJsonBody(req, User.class);

        // 3. 校验  是否为空或字段缺失
        if(user == null || user.getUserName() == null || user.getPassword() == null){
            writeJson(resp, Result.fail(400,"参数缺失"));
            return;
        }

        /*//2、获取表单参数
        String userName = req.getParameter("username");
        String password = req.getParameter("password");

        // 3. 校验  是否为空或字段缺失
        if(userName == null || password == null || userName.trim().isEmpty() || password.trim().isEmpty()){
            fail(resp, "参数缺失");
            return;
        }

        User user = new User();
        user.setUserName(userName);
        user.setPassword(password);
*/

        // 4. 通过工厂获取 Service 实例（解耦，便于维护）
        UserService userService = ServiceFactory.getUserService();

        // 5. 调用登录逻辑
        Result loginResult = userService.login(user.getUserName(), user.getPassword());

        // 6. 返回 JSON 响应
        writeJson(resp, loginResult);

    }
}